#include "../../include/client_handle.h"


/***************************************************
函数名:handlerecvfile
功能:文件接收
传入参数:struct message *msg
返回值:无
***************************************************/
void handlerecvfile(struct message *msg)
{
    int n;
    struct message recvmsg = *msg;
    if(my_strcmp(recvmsg.msg,"end$") == 0)           //接收标志为end$
    {
        printf("文件传输结束!\n");
        my_close(savefilefd);
        savefilefd = -1;
        return ;
    }
    else
    {
        pthread_mutex_lock(&lock);           //上锁
        n=my_write(savefilefd,recvmsg.msg,recvmsg.size); //写入文件，保存聊天记录
        pthread_mutex_unlock(&lock);   //解琐
        if(n < recvmsg.size && n > 0)
        {
            printf("接收文件出错!\n");
	    return ;
        }
        }
    return ;
}

/***************************************************
函数名:handlesendfile
功能:文件传输
传入参数:无
返回值:无
***************************************************/
void handlesendfile()
{

    struct message filedata;
    do
    {
        memset(filedata.msg,0,sizeof(filedata.msg));            //清空消息缓存    
        filedata.size =read(savefilefd,filedata.msg,1000);      
        my_strcpy(filedata.flag,"transf");
        my_strcpy(filedata.addressee,filefromname);
        if (filedata.size == 0)
        {
            printf("文件传输完毕!\n");
            my_strcpy(filedata.msg,"end$");
            my_send(sockfd,&filedata,sizeof(struct message),0);     //向服务器发送结束标志
        }
        else if (filedata.size > 0)
        {
            my_send(sockfd,&filedata,sizeof(struct message),0);     //发送文件数据    
	        usleep(100000);              
        }
        else
        {
            printf("读取文件失败,文件传输中止\n");
            break;
        }
    }while(filedata.size > 0);
    my_close(savefilefd);
    savefilefd = -1 ;
}


